package com.ym.core.redis;

/**
 * Redis的Key
 *
 * @author: 李涛
 * @version: 2019年05月07日 15:21
 */
public enum RedisKeyEnum {

	//------------------------------锁开始----------------------------------

	/**
	 * 全局唯一锁KEY
	 */
	COMMON_LOCK(RedisKeyUtil.KEY_PREFIX, "Global", "Global"),

	/**
	 * 表达重复提交Key
	 */
	REPEAT_KEY(RedisKeyUtil.KEY_PREFIX, "FREQUENT", "REQ_KEY"),

	/**
	 * 就诊订单KEY,抢单的时候使用
	 */
	POOL_ORDER_LOCK(RedisKeyUtil.KEY_PREFIX, "Order", "grab"),

	/**
	 * 频繁操作Key
	 */
	FREQUENT_OPERATION_KEY(RedisKeyUtil.KEY_PREFIX, "FREQUENT_OPERATION_KEY", "FREQUENT_OPERATION_KEY"),

	//------------------------------锁结束----------------------------------

	/**
	 * shiro的session
	 */
	SHIRO_SESSION(RedisKeyUtil.KEY_PREFIX, "shiro", "session"),

	/**
	 * 用户-token关系key
	 */
	SHIRO_TOKEN_USER(RedisKeyUtil.KEY_PREFIX, "shiro", "user"),

	/**
	 * 用户-token关系key
	 */
	SHIRO_TOKEN_PATIENT(RedisKeyUtil.KEY_PREFIX, "shiro", "patient"),

	/**
	 * 用户-token关系key
	 */
	SHIRO_TOKEN_DOCTOR(RedisKeyUtil.KEY_PREFIX, "shiro", "doctor"),

	/**
	 * 发送手机号验证码缓存
	 */
	SEND_PHONE_CODE(RedisKeyUtil.KEY_PREFIX, "SMS", "CODE"),

	/**
	 * 发送手机号验证码次数
	 */
	SEND_PHONE_CODE_TIMES(RedisKeyUtil.KEY_PREFIX, "SMS", "TIMES"),

	/**
	 * 生效记录
	 * redis key 生效时的临时key(EFFECTIVE_VALUE:key:score/expirate:value)
	 */
	EFFECTIVE_VALUE(RedisKeyUtil.KEY_PREFIX, "SORT", "EFFECTIVE"),

	/**
	 * 置顶
	 */
	SET_TOP_TABLE(RedisKeyUtil.KEY_PREFIX, "SORT", "TOP"),
	/**
	 * 医院点击量加一操作
	 */
	HOSPITAL_CLICK_ON_INC(RedisKeyUtil.KEY_PREFIX, "hospitalClickOnInc", "hospitalDetail"),

	/**
	 * 热门搜索关键词
	 */
	HOT_SEARCH_KEYWORD(RedisKeyUtil.KEY_PREFIX, "HOT", "KEYWORD"),

	/**
	 * 医生答复、退款key、支付key
	 */
	REPLY_REFUND_KEY(RedisKeyUtil.KEY_PREFIX, "REPLY_REFUND_KEY", "REPLY_REFUND_KEY"),

	/**
	 * 全科医生抢单池
	 */
	GENERAL_DOCTOR_POOL(RedisKeyUtil.KEY_PREFIX, "DOCTOR_POOL", "GENERAL"),

	/**
	 * 专科医生-工作室抢单池
	 */
	SPECIALIST_DOCTOR_POOL(RedisKeyUtil.KEY_PREFIX, "DOCTOR_POOL", "SPECIALIST"),

	/**
	 * 抢单池订单
	 */
	POOL_ORDER_ID(RedisKeyUtil.KEY_PREFIX, "DOCTOR_POOL", "MEMBER"),
	;

	/**
	 * 系统标识
	 */
	private String keyPrefix;
	/**
	 * 模块名称
	 */
	private String module;
	/**
	 * 方法名称
	 */
	private String func;


	RedisKeyEnum(String keyPrefix, String module, String func) {
		this.keyPrefix = keyPrefix;
		this.module = module;
		this.func = func;
	}

	public String getKeyPrefix() {
		return keyPrefix;
	}

	public String getModule() {
		return module;
	}

	public String getFunc() {
		return func;
	}

	/**
	 * 构建key
	 *
	 * @param objStr
	 * @return
	 */
	public String build(String... objStr) {
		return RedisKeyUtil.keyBuilder(this, objStr);
	}
}
